import { TableColumnCtx } from "element-plus/es/components/table/src/table-column/defaults";
import { TableProps, FormProps } from "element-plus";
import type { ButtonProps } from "element-plus";

import type { OptionsProps, FormSchema, ComponentType } from "./Form";
export interface ButtonSchema
  extends Partial<Omit<ButtonProps, "disabled">> {
  label?: string;
  disabled?: (row: any) => boolean;
  hidden?: (row: any) => boolean;
  style?: { [key: string]: any };
  on?: {
    [key: string]: (row: any, idx: number, data?: any[]) => any;
  }
}
export interface ColumnProps<T = any>
  extends Partial<
    Omit<TableColumnCtx<T>, "children" | "renderHeader" | "renderCell">
  > {
  valueType?: ComponentType;
  // 枚举类型（字典）
  options?: OptionsProps[];
  // 自定义单元格内容渲染
  customRender?: (row: any, idx: number) => any;
  // 是否显示在表格当中,操作列可切换
  hidden?: boolean;
  // 搜索项配置
  search?: Partial<FormSchema> | boolean | undefined;
  // 表单项配置
  form?: Partial<FormSchema> | boolean  | undefined;
  // 在表格中隐藏,操作列不可切换
  hideInTable?: boolean;
  // 操作列按钮
  buttons?: ButtonSchema[];
}

export interface ToolbarProps {
  // 显示刷新按钮
  refresh?: boolean;
  // 显示设置列按钮
  setCol?: boolean;
};

export interface ProTableProps extends Partial<Omit<TableProps<any>, "data">> {
  // 表格搜索配置
  searchConfig?: Partial<Omit<FormProps, "model">>;
  // 显示表格工具栏
  showToolbar?: boolean;
  // 表格工具栏配置
  toolbarConfig?: ToolbarProps;
  // 列配置项
  columns: ColumnProps[];
  // 请求表格数据的 api ==> 非必传
  requestApi: (par: any) => Promise<any> | any;
  // 是否自动执行请求 api
  requestAuto?: boolean;
  // 是否需要分页组件
  pagination?: boolean | { pageNum: number; pageSize: number };
  // 初始化请求参数
  params?: any;
  // 是否带有边框
  border?: boolean;
  // 行数据的 Key,用来优化 Table 的渲染
  rowKey?: string;
  // 模式 弹窗复选:dialog-multiple 弹窗单选:dialog-single
  mode?: string;
  // 选中行
  selectedRows?: Record<string, any> | unknown[]
}

export interface EditTableProps extends Partial<Omit<TableProps<any>, "data">> {
  // 列配置项
  columns: ColumnProps[];
  // 请求表格数据的 api ==> 非必传
  requestApi: (par: any) => Promise<any> | any;
  // 是否自动执行请求 api
  requestAuto?: boolean;
  // 是否需要分页组件
  pagination?: boolean | { pageNum: number; pageSize: number };
  // 初始化请求参数
  params?: any;
  // 是否带有边框
  border?: boolean;
  // 行数据的 Key,用来优化 Table 的渲染
  rowKey?: string;
}

